﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Sispe.Entities;
using Sispe.BussinesLogic;
using Microsoft.Practices.Unity;
using System.IO;
using System.Security.Cryptography;

namespace Sispe.UI
{
    public partial class FrmMttoTrabajador : Form
    {
        [Dependency]
        public ITrabajadorBL tabajadorBL { get; set; }

        [Dependency]
        public IEstadoCivilBL estCivilBL { get; set; }

        [Dependency]
        public ISexoBL sexoBL { get; set; }

        [Dependency]
        public ILineaTelefonicaBL linTelfBL { get; set; }

        [Dependency]
        public ISocioBL socioBL { get; set; }

        [Dependency]
        public IRegimenPensionarioBL regPensionarioBL { get; set; }

        [Dependency]
        public IBancoBL bancoBL { get; set; }

        [Dependency]
        public IUbicacionTrabajadorBL ubicTrabBL { get; set; }

        [Dependency]
        public IUbigeoBL ubigeoBL { get; set; }

        [Dependency]
        public IRuralBL ruralBL { get; set; }

        [Dependency]
        public IPersonaBL personaBL { get; set; }

       [Dependency]
        public IReferenciaBL referenciaBL { get; set; }

        [Dependency]
        public ITrabajadorBL trabajadorBL { get; set; }

        [Dependency]
        public IEspecialidadTrabajadorBL esptrabBL { get; set; }

        [Dependency]
        public IEstudioBL estudioBL { get; set; }

        [Dependency]
        public IGradoBL gradoBL { get; set; }

        [Dependency]
        public ITrabajadorEspecialidadBL trabEspecialidadBL { get; set; }

        [Dependency]
        public ITrabajadorPadreBL trabPadreBL { get; set; }

        [Dependency]
        public ITelefonoBL telefonoBL { get; set; }

        [Dependency]
        public IFotocheckBL fotocheckBL { get; set; }

        [Dependency]
        public IFotoBL fotoBL { get; set; }

        [Dependency]
        public IExpedienteBL expedienteBL { get; set; }

        [Dependency]
        public ITrabajadorCapacitacionBL trabCapBL { get; set; }

        OpenFileDialog dialog;
        byte[] contents;
        public int IdTrabajador;

        public FrmMttoTrabajador()
        {
            InitializeComponent();
            this.BuildUp();

            lINEATELEFONICABindingSource1.DataSource = linTelfBL.GetAllFromLineaTelefonica();
        }

        //List<DOCUMENTO> _listDocumentoPorAsignar;

        bool isNew;
        byte[] pic = null;
        StringBuilder sb = new StringBuilder();
        StringBuilder sbPDF = new StringBuilder();
        int sexoId;
        int estCivilId;

        public void NuevoTrabajador()
        {
            isNew = true;
            tcDatos.TabPages.Remove(datExpediente);
            pERSONABindingSource.AddNew();
            tRABAJADORBindingSource.AddNew();

            cbSexo.DataSource = sexoBL.GetAllFromSexo();
            cbEstCivil.DataSource = estCivilBL.GetAllFromEstadoCivil();

            //if (cbxRecomendable.Checked == true)
            //{
            //    tcDatos.TabPages.Remove(datObservaciones);
            //}
        }

        public TRABAJADOR _trabajador { get; set; }

        public void EditarTrabajador()
        {
            isNew = false;
            //tcDatos.TabPages.Add(datExpediente);
            _trabajador.PERSONA.TELEFONOS = telefonoBL.GetAllFromTelefonoByPersona(_trabajador.PERSONA.IdPersona);
            _trabajador.FOTOCHECKS = fotocheckBL.GetAllFromFotocheckByPersona(_trabajador.PERSONA.IdPersona);
            _trabajador.TRABAJADOR_PADRES = trabPadreBL.GetAllFromTrabajadorPadresByTrabajadorId(_trabajador.Id);
            _trabajador.TRABAJADOR_ESPECIALIDAD = trabEspecialidadBL.GetAllFromTrabajadorEspecialidadByTrabajadorId(_trabajador.Id);
            _trabajador.TRABAJADOR_CAPACITACION = trabCapBL.GetAllFromTrabajadorCapacitacionByTrabajadorId(_trabajador.Id);
            _trabajador.PERSONA.SEXO = sexoBL.GetFromSexoById(_trabajador.PERSONA.IdSexo);
            _trabajador.PERSONA.ESTADO_CIVIL = estCivilBL.GetFromEstadoCivilById(_trabajador.PERSONA.IdEstadoCivil);
            _trabajador.ESTUDIO = estudioBL.GetFromEstudioById(_trabajador.IdEstudios);

            cbSexo.DataSource = sexoBL.GetAllFromSexoByDescripcion(_trabajador.PERSONA.SEXO.Descripcion);
            cbEstCivil.DataSource = estCivilBL.GetAllfromEstadoCivilByDescripcion(_trabajador.PERSONA.ESTADO_CIVIL.Descripcion);

            nombresTextBox.ReadOnly = false;
            apeMaternoTextBox.ReadOnly = false;
            apePaternoTextBox.ReadOnly = false;
            direccionTextBox.ReadOnly = false;
            emailTextBox.ReadOnly = false;
            //if (cbxRecomendable.Checked == false)
            //{
            //    tcDatos.TabPages.Add(datObservaciones);
            //}
            //else if (cbxRecomendable.Checked == true)
            //{
            //    tcDatos.TabPages.Remove(datObservaciones);
            //}

            //cargando la foto
            var img = fotoBL.GetAllFotoById(_trabajador.Id);
            if (img.Hash != null)
            {
                MemoryStream stream = new MemoryStream(img.Imagen);
                pbFotoTrab.Image = Image.FromStream(stream);
            }
            else
            {
                pbFotoTrab.Image = pbFotoTrab.ErrorImage;
            }
            nivelEstudiosComboBox.Text = _trabajador.NivelEstudios;

            tRABAJADORBindingSource.DataSource = _trabajador;
            pERSONABindingSource.DataSource = _trabajador.PERSONA;
        }

        public void DetalleTrabajador()
        {
            _trabajador.PERSONA.TELEFONOS = telefonoBL.GetAllFromTelefonoByPersona(_trabajador.PERSONA.IdPersona);
            _trabajador.FOTOCHECKS = fotocheckBL.GetAllFromFotocheckByPersona(_trabajador.PERSONA.IdPersona);
            _trabajador.TRABAJADOR_PADRES = trabPadreBL.GetAllFromTrabajadorPadresByTrabajadorId(_trabajador.Id);
            _trabajador.TRABAJADOR_ESPECIALIDAD = trabEspecialidadBL.GetAllFromTrabajadorEspecialidadByTrabajadorId(_trabajador.Id);
            _trabajador.TRABAJADOR_CAPACITACION = trabCapBL.GetAllFromTrabajadorCapacitacionByTrabajadorId(_trabajador.Id);
            _trabajador.PERSONA.SEXO = sexoBL.GetFromSexoById(_trabajador.PERSONA.IdSexo);
            cbSexo.DataSource = sexoBL.GetAllFromSexoByDescripcion(_trabajador.PERSONA.SEXO.Descripcion);
            _trabajador.PERSONA.ESTADO_CIVIL = estCivilBL.GetFromEstadoCivilById(_trabajador.PERSONA.IdEstadoCivil);
            cbEstCivil.DataSource = estCivilBL.GetAllfromEstadoCivilByDescripcion(_trabajador.PERSONA.ESTADO_CIVIL.Descripcion);

            //cargando la foto
            var img = fotoBL.GetAllFotoById(_trabajador.Id);
            if (img.Hash != null)
            {
                MemoryStream stream = new MemoryStream(img.Imagen);
                pbFotoTrab.Image = Image.FromStream(stream);
            }
            else
            {
                pbFotoTrab.Image = pbFotoTrab.ErrorImage;
            }
            nivelEstudiosComboBox.Text = _trabajador.NivelEstudios;
            tRABAJADORBindingSource.DataSource = _trabajador;
            pERSONABindingSource.DataSource = _trabajador.PERSONA;

            dataDisable();
        }

        public void dataDisable()
        {
            dniTextBox.ReadOnly = true;
            btnVerificarDni.Enabled = false;
            apePaternoTextBox.ReadOnly = true;
            apeMaternoTextBox.ReadOnly = true;
            nombresTextBox.ReadOnly = true;
            fechaNacimientoDateTimePicker.Enabled = false;
            direccionTextBox.ReadOnly = true;
            emailTextBox.ReadOnly = true;
            tELEFONOSDataGridView.ReadOnly = true;
            cbEstCivil.Enabled = false;
            cbSexo.Enabled = false;
            cbxRecomendable.Enabled = false;
            cbxSindicato.Enabled = false;
            btnSocio.Enabled = false;
            btnRegPensionario.Enabled = false;
            btnBanco.Enabled = false;
            btnUbiTrabajador.Enabled = false;
            nroCuspTextBox.ReadOnly = true;
            nroCuentaTextBox.ReadOnly = true;
            zapatoTextBox.ReadOnly = true;
            codigoTextBox.ReadOnly = true;
            btnVerificarUbigeo.Enabled = false;
            btnUbigeo.Enabled = false;
            btnRural.Enabled = false;
           // btnEstudios.Enabled = false;
            tRABAJADOR_ESPECIALIDADDataGridView.ReadOnly = true;
            btnAddEspecialidad.Enabled = false;
            btnReferencia.Enabled = false;
            autogeneradoEsSaludTextBox.ReadOnly = true;
            grupoSanguineoTextBox.ReadOnly = true;
            nroConstanciaEstudiosTextBox.ReadOnly = true;
            observacionRichTextBox.ReadOnly = true;
            tRABAJADOR_PADRESDataGridView.ReadOnly = true;
            btnAddPadres.Enabled = false;
            btnGuardar.Enabled = false;
            btnCargaImagen.Enabled = false;
            btnCargarArchivo.Enabled = false;
            tRABAJADOR_CAPACITACIONDataGridView.ReadOnly = true;
            btnAddCapacitacion.Enabled = false;
        }

        private void FrmMttoTrabajador_Load(object sender, EventArgs e)
        {
            //_listDocumentoPorAsignar = new List<DOCUMENTO>();
        }

        private void cbSexo_Click_1(object sender, EventArgs e)
        {
            cbSexo.DataSource = sexoBL.GetAllFromSexo();
        }

        private void cbSexo_SelectedValueChanged_1(object sender, EventArgs e)
        {
            if (cbSexo.SelectedValue != null)
            {
                var a = (from c in sexoBL.GetAllFromSexoByDescripcion(cbSexo.SelectedValue.ToString())
                         select c.IdSexo).SingleOrDefault();

                idSexoTextBox.Text = Convert.ToString(a);
                sexoId = a;
            }
        }

        private void cbEstCivil_Click_1(object sender, EventArgs e)
        {
            cbEstCivil.DataSource = estCivilBL.GetAllFromEstadoCivil();
        }

        private void cbEstCivil_SelectedValueChanged_1(object sender, EventArgs e)
        {
            if (cbEstCivil.SelectedValue != null)
            {
                var a = (from c in estCivilBL.GetAllfromEstadoCivilByDescripcion(cbEstCivil.SelectedValue.ToString())
                         select c.IdEstadoCivil).SingleOrDefault();

                idEstadoCivilTextBox.Text = Convert.ToString(a);
                estCivilId = a;
            }
        }

        //cargando datos de SOCIO con boton extendido
        private void btnSocio_Click(object sender, EventArgs e)
        {
            cargaSocio();
        }

        public void cargaSocio()
        {
            FrmSocio frm = new FrmSocio();
            frm.Extend();
            frm.ShowDialog();

            if (frm.currentSocio != null)
            {
                var nuevoSocio = socioBL.GetFromSocioById(frm.currentSocio.IdSocio);
                var socio = tRABAJADORBindingSource.Current as TRABAJADOR;
                socio.SOCIO = nuevoSocio;
                socio.IdSocio = nuevoSocio.IdSocio;
                tRABAJADORBindingSource.ResetBindings(true);
            }
        }

        //cargando datos de REGIMEN PENSIONARIO con boton extendido
        private void btnRegPensionario_Click(object sender, EventArgs e)
        {
            cargaRegPensionario();
        }

        public void cargaRegPensionario()
        {
            FrmRegimenPensionario frm = new FrmRegimenPensionario();
            frm.Extend();
            frm.ShowDialog();

            if (frm.currentRegimen != null)
            {
                var NuevoregPensionario = regPensionarioBL.GetFromRegimenPensionarioById(frm.currentRegimen.IdRegimenPensionario);
                var regPensionario = tRABAJADORBindingSource.Current as TRABAJADOR;
                regPensionario.REGIMEN_PENSIONARIO = NuevoregPensionario;
                regPensionario.IdRegimenPensionario = NuevoregPensionario.IdRegimenPensionario;
                tRABAJADORBindingSource.ResetBindings(true);
            }
        }

        //cargando datos de BANCO con boton extendido
        private void btnBanco_Click(object sender, EventArgs e)
        {
            cargaBanco();
        }

        public void cargaBanco()
        {
            FrmBanco frm = new FrmBanco();
            frm.Extend();
            frm.ShowDialog();

            if (frm.currentBanco != null)
            {
                var nuevoBanco = bancoBL.GetFromBancoById(frm.currentBanco.IdBanco);
                var banco = tRABAJADORBindingSource.Current as TRABAJADOR;
                banco.BANCO = nuevoBanco;
                banco.IdBanco = nuevoBanco.IdBanco;
                tRABAJADORBindingSource.ResetBindings(true);
            }
        }

        //cargando datos de UBICACION DE TRABAJADOR con boton extendido
        private void btnUbiTrabajador_Click(object sender, EventArgs e)
        {
            cargaUbicTrabajador();
        }

        public void cargaUbicTrabajador()
        {
            FrmUbicacionTrabajador frm = new FrmUbicacionTrabajador();
            frm.Extend();
            frm.ShowDialog();

            if (frm.currentUbicacion != null)
            {
                var nuevaUbicTrab = ubicTrabBL.GetAllFromUbicacionTrabajadorById(frm.currentUbicacion.IdUbicacionTrabajador);
                var ubicTrab = tRABAJADORBindingSource.Current as TRABAJADOR;
                ubicTrab.UBICACION_TRABAJADOR = nuevaUbicTrab;
                ubicTrab.IdUbicacionTrabajador = nuevaUbicTrab.IdUbicacionTrabajador;
                tRABAJADORBindingSource.ResetBindings(true);
            }
        }

        //cargando datos de UBIGEO con boton extendido
        private void btnUbigeo_Click(object sender, EventArgs e)
        {
            cargaUbigeo();
        }

        public void cargaUbigeo()
        {
            FrmUbigeo frm = new FrmUbigeo();
            frm.Extend();
            frm.ShowDialog();

            if (frm.currentUbigeo != null)
            {
                var nuevoUbigeo = ubigeoBL.GEtFromUbigeoById(frm.currentUbigeo.IdUbigeo);
                var ubigeo = tRABAJADORBindingSource.Current as TRABAJADOR;
                ubigeo.UBIGEO = nuevoUbigeo;
                ubigeo.IdUbigeo = nuevoUbigeo.IdUbigeo;
                tRABAJADORBindingSource.ResetBindings(true);
            }
        }

        //cargando datos RURAL con boton extendido
        private void btnRural_Click(object sender, EventArgs e)
        {
            cargaRural();
        }

        public void cargaRural()
        {
            FrmRural frm = new FrmRural();
            frm.Extend();
            frm.ShowDialog();

            if (frm.currentRural != null)
            {
                var nuevoRural = ruralBL.GetFromRuralById(frm.currentRural.IdRural);
                var rural = tRABAJADORBindingSource.Current as TRABAJADOR;
                rural.RURAL = nuevoRural;
                rural.IdRural = nuevoRural.IdRural;
                tRABAJADORBindingSource.ResetBindings(true);
            }
        }

        //cargando datos REFERENCIA con boton extendido
        private void btnReferencia_Click(object sender, EventArgs e)
        {
            cargaReferencia();
        }

        public void cargaReferencia()
        {
            FrmReferencia frm = new FrmReferencia();
            frm.Extend();
            frm.ShowDialog();

            if (frm.currentReferencia != null)
            {
                var nuevaReferencia = referenciaBL.GetFromReferenciaById(frm.currentReferencia.IdReferencia);
                var referencia = tRABAJADORBindingSource.Current as TRABAJADOR;
                referencia.REFERENCIA = nuevaReferencia;
                referencia.IdReferencia = nuevaReferencia.IdReferencia;
                tRABAJADORBindingSource.ResetBindings(true);
            }
        }

        //cargar IMAGEN
        private void btnCargaImagen_Click(object sender, EventArgs e)
        {
            this.openFileDialog1.ShowDialog();
        }

        private void ObtenerImg()
        {
            sb = new StringBuilder();
            /*Convertir la imagen en arreglo de bytes[]*/
            MemoryStream stream = new MemoryStream();
            pbFotoTrab.Image.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);
            pic = stream.ToArray();

            /*Obtener el md5*/
            MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
            byte[] hash = md5.ComputeHash(pic);

            foreach (var b in hash)
            {
                sb.Append(b.ToString("x2").ToUpper());
            }
        }

        private void openFileDialog1_FileOk(object sender, CancelEventArgs e)
        {
            this.pbFotoTrab.Image = Image.FromFile(this.openFileDialog1.FileName);
        }

        //verifica existencia de UBIGEO y carga
        public void verificaExistenciaUbigeo()
        {
            var ubigeo = ubigeoBL.GetFromUbigeoByCodigo(codigoTextBox.Text);
            var trabajador = tRABAJADORBindingSource.Current as TRABAJADOR;
            if (ubigeo != null)
            {
                trabajador.UBIGEO = ubigeo;
                trabajador.IdUbigeo = ubigeo.IdUbigeo;
                tRABAJADORBindingSource.ResetBindings(true);
            }
            else
            {
                var rpt = MessageBox.Show(this, "Ubigeo NO Existente ¿Desea Crear Ubigeo?", "Mensaje", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (rpt == DialogResult.Yes)
                {
                    FrmMttoUbigeo frm = new FrmMttoUbigeo();
                    frm.NuevoUbigeoTrabajador(codigoTextBox.Text);
                    frm.ShowDialog();
                }
            }
        }

        private void btnVerificarUbigeo_Click(object sender, EventArgs e)
        {
            verificaExistenciaUbigeo();
        }

        private void codigoTextBox_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                verificaExistenciaUbigeo();
            }
        }

        private void codigoTextBox_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
        {
            if (e.KeyCode == Keys.Tab)
            {
                verificaExistenciaUbigeo();
            }
        }

        private void codigoTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsNumber(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void dniTextBox_TextChanged(object sender, EventArgs e)
        {
            var persona = pERSONABindingSource.Current as PERSONA;
            persona.Dni = dniTextBox.Text;
            lblDni.Text = persona.Dni;
        }

        private void apePaternoTextBox_TextChanged(object sender, EventArgs e)
        {
            var persona = pERSONABindingSource.Current as PERSONA;
            persona.ApePaterno = apePaternoTextBox.Text.ToUpper();
            lblNombreCompleto.Text = persona.NombreCompleto.ToUpper();
        }

        private void apeMaternoTextBox_TextChanged(object sender, EventArgs e)
        {
            var persona = pERSONABindingSource.Current as PERSONA;
            persona.ApeMaterno = apeMaternoTextBox.Text.ToUpper();
            lblNombreCompleto.Text = persona.NombreCompleto.ToUpper();
        }

        private void nombresTextBox_TextChanged(object sender, EventArgs e)
        {
            var persona = pERSONABindingSource.Current as PERSONA;
            persona.Nombres = nombresTextBox.Text.ToUpper();
            lblNombreCompleto.Text = persona.NombreCompleto.ToUpper();
        }

        private void dniTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsNumber(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        //verificar existencia de DNI
        public void existeDni()
        {
            
            if (dniTextBox.Text.Length != 0)
            {
                if (dniTextBox.Text.Length == 8)
                {
                    var persona = personaBL.GetFromPersonaByDni(dniTextBox.Text);

                    if (persona != null && persona.TRABAJADOR != null)
                    {
                        pERSONABindingSource.DataSource = persona;
                        tELEFONOBindingSource.DataSource = persona.TELEFONOS;
                        MessageBox.Show("Persona Existente", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        Close();
                    }
                    else
                    {
                        MessageBox.Show("Persona Disponible", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        apePaternoTextBox.ReadOnly = false;
                        apeMaternoTextBox.ReadOnly = false;
                        nombresTextBox.ReadOnly = false;
                        direccionTextBox.ReadOnly = false;
                        emailTextBox.ReadOnly = false;
                        if (persona != null)
                        {
                            pERSONABindingSource.DataSource = persona;
                            tELEFONOBindingSource.DataSource = persona.TELEFONOS;
                            apePaternoTextBox.ReadOnly = true;
                            apeMaternoTextBox.ReadOnly = true;
                            nombresTextBox.ReadOnly = true;
                            direccionTextBox.ReadOnly = true;
                            emailTextBox.ReadOnly = true;
                        }
                    }
                }
                else
                {
                    MessageBox.Show("DNI incorrecto", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            else
            {
                MessageBox.Show("Ingrese un DNI", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void btnVerificarDni_Click(object sender, EventArgs e)
        {

            if (dniTextBox.Text.Length == 8)
            {
                existeDni();
            }
            else
            {
                MessageBox.Show("Longitud DNI Incorrecta");
            }
        }

        private void dniTextBox_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                if (dniTextBox.Text.Length == 8)
                {
                    existeDni();
                }
                else
                {
                    MessageBox.Show("Longitud DNI Incorrecta");
                }
            }
        }

        private void dniTextBox_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
        {
            if (e.KeyCode == Keys.Tab)
            {
                if (dniTextBox.Text.Length == 8)
                {
                    existeDni();
                }
                else
                {
                    MessageBox.Show("Longitud DNI Incorrecta");
                }
            }
        }

        //cargando arxivo....
        private void btnCargarArchivo_Click(object sender, EventArgs e)
        {
            //this.openFileDialog2.ShowDialog();
            dialog = new OpenFileDialog();
            dialog.Filter = "PDF files|*.pdf";
            dialog.FileOk += delegate(object s, CancelEventArgs ev)
            {
                var size = new FileInfo(dialog.FileName).Length;
                if (size > 26214400)
                {
                    MessageBox.Show("Lo siento, el archivo es muy pesado.", "ERROR!", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    ev.Cancel = true;             // <== here
                }
            };
            if (dialog.ShowDialog() == DialogResult.OK)
            {
                MessageBox.Show(dialog.FileName + " seleccionado", "CV", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void openFileDialog2_FileOk(object sender, CancelEventArgs e)
        {
            //var PDF = Image.FromFile(this.openFileDialog2.FileName);
        }

        private int ObtenerArchivoPDF()
        {
            if (dialog != null && dialog.SafeFileName != "")
            {
                sbPDF = new StringBuilder();
                ///*Convertir el archivo en arreglo de bytes[]*/
                FileStream fStream = File.OpenRead(dialog.FileName);
                contents = new byte[fStream.Length];
                fStream.Read(contents, 0, (int)fStream.Length);
                fStream.Close();

                ///*Obtener el md5*/
                MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
                byte[] hash = md5.ComputeHash(contents);

                foreach (var b in hash)
                {
                    sbPDF.Append(b.ToString("x2").ToUpper());
                }

                return 1;
            }
            else
            {
                return 0;
            }
        }        

        //guardando y editando a persona-trabajador
        private void btnGuardar_Click(object sender, EventArgs e)
        {
            var persona = pERSONABindingSource.Current as PERSONA;
            var trabajador = tRABAJADORBindingSource.Current as TRABAJADOR;

            //asignando atributos de PERSONA
            persona.IdSexo = sexoId;
            persona.IdEstadoCivil = estCivilId;
            persona.FechaNacimiento = fechaNacimientoDateTimePicker.Value;



            //asignando atributos de TRABAJADOR
            //trabajador.FechaIngreso = fechaIngresoDateTimePicker.Value;
            if (cbxRecomendable.Checked == true)
            {
                trabajador.Recomendable = true;
            }
            else if (cbxRecomendable.Checked == false)
            {
                trabajador.Recomendable = false;
            }
            if (cbxSindicato.Checked == true)
            {
                trabajador.Sindicato = true;
            }
            else if (cbxSindicato.Checked == false)
            {
                trabajador.Sindicato = false;
            }

            //asignando TRABAJADOR a person
            persona.TRABAJADOR = trabajador;

            var msg = "ERROR";

            var edad = 0;
            try
            {
                edad = Convert.ToInt32(txtEdad.Text);
            }
            catch (Exception)
            {
                //MessageBox.Show("Ingrese una fecha de nacimiento correcta", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                edad = 0;
            }


            if (persona != null)
            {
                if (isNew == true)
                {
                    //if (Convert.ToInt32(txtEdad.Text) > 0 || txtEdad == null)
                    if (edad > 0)
                    {
                        try
                        {
                            #region IsNew
                            if (pbFotoTrab.Image != null && pbFotoTrab.Image != pbFotoTrab.ErrorImage)
                            {
                                ObtenerImg();
                                var foto = new FOTO()
                                {
                                    Imagen = pic,
                                    Hash = sb.ToString(),
                                    IdTrabajador = persona.TRABAJADOR.Id
                                };

                                persona.ApeMaterno = apeMaternoTextBox.Text.ToUpper();
                                persona.ApePaterno = apePaternoTextBox.Text.ToUpper();
                                persona.Nombres = nombresTextBox.Text.ToUpper();
                                persona.Direccion = direccionTextBox.Text.ToUpper();
                                persona.TRABAJADOR.AutogeneradoEsSalud = autogeneradoEsSaludTextBox.Text.ToUpper();
                                persona.TRABAJADOR.GrupoSanguineo = grupoSanguineoTextBox.Text.ToUpper();
                                persona.TRABAJADOR.Nacionalidad = "PERUANA";
                                persona.TRABAJADOR.PaisEmisor = "PERÚ";
                                persona.TRABAJADOR.Observacion = observacionRichTextBox.Text.ToUpper();
                                persona.TRABAJADOR.FOTOes = foto;
                                persona.TRABAJADOR.Edad = txtEdad.Text;
                                persona.TRABAJADOR.Talla = tallaTextBox.Text.ToUpper();
                                persona.TRABAJADOR.NivelEstudios = nivelEstudiosComboBox.Text.ToUpper();
                                persona.TRABAJADOR.ComentarioNivel = comentarioNivelTextBox.Text.ToUpper();
                                persona.TRABAJADOR.IdEstudios = 1;
                                persona.TRABAJADOR.ESTUDIO = estudioBL.GetFromEstudioById(1);
                                persona.TRABAJADOR.ESTUDIO.GRADO = gradoBL.GetFromGradosById(1);
                                var expediente = new EXPEDIENTE()
                                {
                                    IdTrabajador = persona.TRABAJADOR.Id,
                                    FichaPersonal = fichaPersonalCheckBox.Checked ? true : false,
                                    HojaInduccion = hojaInduccionCheckBox.Checked ? true : false,
                                    HistorialFotocheck = historialFotocheckCheckBox.Checked ? true : false,
                                    InformePsicologico = informePsicologicoCheckBox.Checked ? true : false,
                                    CertificadoEstudios = certificadoEstudiosCheckBox.Checked ? true : false,
                                    CertificadoTrabajo = certificadoTrabajoCheckBox.Checked ? true : false,
                                    HojaVida = hojaVidaCheckBox.Checked ? true : false,
                                    CursoCertificados = cursoCertificadosCheckBox.Checked ? true : false,
                                    CopiaDNI = copiaDNICheckBox.Checked ? true : false,
                                    ConstanciaAFP = constanciaAFPCheckBox.Checked ? true : false,
                                    PartidaMatrimonio = partidaMatrimonioCheckBox.Checked ? true : false,
                                    CopiaDNIPareja = copiaDNIParejaCheckBox.Checked ? true : false,
                                    CopiaDNIHijos = copiaDNIHijosCheckBox.Checked ? true : false,
                                    ConstanciaEstudiosHijos = constanciaAFPCheckBox.Checked ? true : false,
                                    HojasComplementarias = hojasComplementariasCheckBox.Checked ? true : false,
                                    Retenciones = retencionesCheckBox.Checked ? true : false,
                                    Observaciones = observacionesTextBox.Text.ToUpper()
                                };

                                persona.TRABAJADOR.EXPEDIENTE = expediente;

                                var valor = ObtenerArchivoPDF();
                                if (valor != 0)
                                {
                                    var cv = new CURRICULO()
                                    {
                                        IdTrabajador = persona.TRABAJADOR.Id,
                                        Imagen = contents,
                                        Hash = sbPDF.ToString()
                                    };

                                    persona.TRABAJADOR.CURRICULO = cv;
                                }                                

                                personaBL.AddPersonaTrabajador(persona);
                                MessageBox.Show("Registro Correcto", "Registro",
                                MessageBoxButtons.OK, MessageBoxIcon.Information);
                                this.Close();
                            }
                            else
                            {
                                var rpt = MessageBox.Show(this, "¿Seguro que desea guardar a Persona sin una imagen?", "Mensaje", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                                if (rpt == DialogResult.Yes)
                                {
                                    var foto = new FOTO()
                                    {
                                        IdTrabajador = persona.TRABAJADOR.Id
                                    };

                                    persona.ApeMaterno = apeMaternoTextBox.Text.ToUpper();
                                    persona.ApePaterno = apePaternoTextBox.Text.ToUpper();
                                    persona.Nombres = nombresTextBox.Text.ToUpper();
                                    persona.Direccion = direccionTextBox.Text.ToUpper();
                                    persona.TRABAJADOR.AutogeneradoEsSalud = autogeneradoEsSaludTextBox.Text.ToUpper();
                                    persona.TRABAJADOR.GrupoSanguineo = grupoSanguineoTextBox.Text.ToUpper();
                                    persona.TRABAJADOR.Nacionalidad = "PERUANA";
                                    persona.TRABAJADOR.PaisEmisor = "PERÚ";
                                    persona.TRABAJADOR.Observacion = observacionRichTextBox.Text.ToUpper();
                                    persona.TRABAJADOR.FOTOes = foto;
                                    persona.TRABAJADOR.Edad = txtEdad.Text;
                                    persona.TRABAJADOR.Talla = tallaTextBox.Text.ToUpper();
                                    persona.TRABAJADOR.NivelEstudios = nivelEstudiosComboBox.Text.ToUpper();
                                    persona.TRABAJADOR.ComentarioNivel = comentarioNivelTextBox.Text.ToUpper();
                                    persona.TRABAJADOR.IdEstudios = 1;
                                    persona.TRABAJADOR.ESTUDIO = estudioBL.GetFromEstudioById(1);
                                    persona.TRABAJADOR.ESTUDIO.GRADO = gradoBL.GetFromGradosById(1);
                                    //Expediente
                                    var expediente = new EXPEDIENTE()
                                    {
                                        IdTrabajador = persona.TRABAJADOR.Id,
                                        FichaPersonal = fichaPersonalCheckBox.Checked ? true : false,
                                        HojaInduccion = hojaInduccionCheckBox.Checked ? true : false,
                                        HistorialFotocheck = historialFotocheckCheckBox.Checked ? true : false,
                                        InformePsicologico = informePsicologicoCheckBox.Checked ? true : false,
                                        CertificadoEstudios = certificadoEstudiosCheckBox.Checked ? true : false,
                                        CertificadoTrabajo = certificadoTrabajoCheckBox.Checked ? true : false,
                                        HojaVida = hojaVidaCheckBox.Checked ? true : false,
                                        CursoCertificados = cursoCertificadosCheckBox.Checked ? true : false,
                                        CopiaDNI = copiaDNICheckBox.Checked ? true : false,
                                        ConstanciaAFP = constanciaAFPCheckBox.Checked ? true : false,
                                        PartidaMatrimonio = partidaMatrimonioCheckBox.Checked ? true : false,
                                        CopiaDNIPareja = copiaDNIParejaCheckBox.Checked ? true : false,
                                        CopiaDNIHijos = copiaDNIHijosCheckBox.Checked ? true : false,
                                        ConstanciaEstudiosHijos = constanciaAFPCheckBox.Checked ? true : false,
                                        HojasComplementarias = hojasComplementariasCheckBox.Checked ? true : false,
                                        Retenciones = retencionesCheckBox.Checked ? true : false,
                                        Observaciones = observacionesTextBox.Text.ToUpper()
                                    };

                                    persona.TRABAJADOR.EXPEDIENTE = expediente;

                                    var valor = ObtenerArchivoPDF();
                                    if (valor != 0)
                                    {
                                        var cv = new CURRICULO()
                                        {
                                            IdTrabajador = persona.TRABAJADOR.Id,
                                            Imagen = contents,
                                            Hash = sbPDF.ToString()
                                        };

                                        persona.TRABAJADOR.CURRICULO = cv;
                                    }

                                    personaBL.AddPersonaTrabajador(persona);
                                    MessageBox.Show("Registro Correcto", "Registro",
                                    MessageBoxButtons.OK, MessageBoxIcon.Information);
                                    this.Close();
                                }
                            }
                            #endregion
                        }
                        catch (Exception ex)
                        {
                            msg = ex.Message;
                            MessageBox.Show(msg, "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                    }
                    else
                    {

                        MessageBox.Show("La fecha de nacimiento debe ser menor a la actual", "Mensaje",
                    MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }

                }
                if (isNew == false)
                {
                    //if (Convert.ToInt32(txtEdad.Text) > 0 || txtEdad == null)
                    if (edad > 0)
                    {
                        try
                        {
                            #region Update
                            if (pbFotoTrab.Image != null && pbFotoTrab.Image != pbFotoTrab.ErrorImage)
                            {
                                ObtenerImg();
                                var foto = new FOTO()
                                {
                                    Imagen = pic,
                                    Hash = sb.ToString(),
                                    IdTrabajador = persona.TRABAJADOR.Id
                                };

                                persona.ApeMaterno = apeMaternoTextBox.Text.ToUpper();
                                persona.ApePaterno = apePaternoTextBox.Text.ToUpper();
                                persona.Nombres = nombresTextBox.Text.ToUpper();
                                persona.Direccion = direccionTextBox.Text.ToUpper();
                                //persona.TRABAJADOR.Talla = tallaTextBox.Text.ToUpper();
                                persona.TRABAJADOR.NivelEstudios = nivelEstudiosComboBox.Text.ToUpper();
                                persona.TRABAJADOR.ComentarioNivel = comentarioNivelTextBox.Text.ToUpper();
                                persona.TRABAJADOR.IdEstudios = 1;
                                persona.TRABAJADOR.ESTUDIO = estudioBL.GetFromEstudioById(1);
                                persona.TRABAJADOR.ESTUDIO.GRADO = gradoBL.GetFromGradosById(1);
                                //persona.TRABAJADOR.AutogeneradoEsSalud = autogeneradoEsSaludTextBox.Text.ToUpper();
                                //persona.TRABAJADOR.GrupoSanguineo = grupoSanguineoTextBox.Text.ToUpper();

                                persona.TRABAJADOR.Nacionalidad = "PERUANA";
                                persona.TRABAJADOR.PaisEmisor = "PERÚ";

                                persona.TRABAJADOR.Observacion = observacionRichTextBox.Text.ToUpper();
                                persona.TRABAJADOR.FOTOes = foto;
                                persona.TRABAJADOR.Edad = txtEdad.Text;

                                //Expediente
                                var expediente = new EXPEDIENTE()
                                {
                                    IdTrabajador = persona.TRABAJADOR.Id,
                                    FichaPersonal = fichaPersonalCheckBox.Checked ? true : false,
                                    HojaInduccion = hojaInduccionCheckBox.Checked ? true : false,
                                    HistorialFotocheck = historialFotocheckCheckBox.Checked ? true : false,
                                    InformePsicologico = informePsicologicoCheckBox.Checked ? true : false,
                                    CertificadoEstudios = certificadoEstudiosCheckBox.Checked ? true : false,
                                    CertificadoTrabajo = certificadoTrabajoCheckBox.Checked ? true : false,
                                    HojaVida = hojaVidaCheckBox.Checked ? true : false,
                                    CursoCertificados = cursoCertificadosCheckBox.Checked ? true : false,
                                    CopiaDNI = copiaDNICheckBox.Checked ? true : false,
                                    ConstanciaAFP = constanciaAFPCheckBox.Checked ? true : false,
                                    PartidaMatrimonio = partidaMatrimonioCheckBox.Checked ? true : false,
                                    CopiaDNIPareja = copiaDNIParejaCheckBox.Checked ? true : false,
                                    CopiaDNIHijos = copiaDNIHijosCheckBox.Checked ? true : false,
                                    ConstanciaEstudiosHijos = constanciaAFPCheckBox.Checked ? true : false,
                                    HojasComplementarias = hojasComplementariasCheckBox.Checked ? true : false,
                                    Retenciones = retencionesCheckBox.Checked ? true : false,
                                    Observaciones = observacionesTextBox.Text.ToUpper()
                                };

                                persona.TRABAJADOR.EXPEDIENTE = expediente;

                                var valor = ObtenerArchivoPDF();
                                if (valor != 0)
                                {
                                    var cv = new CURRICULO()
                                    {
                                        IdTrabajador = persona.TRABAJADOR.Id,
                                        Imagen = contents,
                                        Hash = sbPDF.ToString()
                                    };

                                    persona.TRABAJADOR.CURRICULO = cv;
                                }

                                personaBL.UpdatePersonaTrabajador(persona);
                                MessageBox.Show("Modificación Correcta", "Registro",
                                MessageBoxButtons.OK, MessageBoxIcon.Information);
                                this.Close();
                            }
                            else
                            {
                                var rpt = MessageBox.Show(this, "¿Seguro que desea guardar a Persona sin una imagen?", "Mensaje", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                                if (rpt == DialogResult.Yes)
                                {
                                    var foto = new FOTO()
                                    {
                                        IdTrabajador = persona.TRABAJADOR.Id
                                    };

                                    persona.ApeMaterno = apeMaternoTextBox.Text.ToUpper();
                                    persona.ApePaterno = apePaternoTextBox.Text.ToUpper();
                                    persona.Nombres = nombresTextBox.Text.ToUpper();
                                    persona.Direccion = direccionTextBox.Text.ToUpper();
                                    persona.TRABAJADOR.NivelEstudios = nivelEstudiosComboBox.Text.ToUpper();
                                    persona.TRABAJADOR.ComentarioNivel = comentarioNivelTextBox.Text.ToUpper();
                                    persona.TRABAJADOR.IdEstudios = 1;
                                    persona.TRABAJADOR.ESTUDIO = estudioBL.GetFromEstudioById(1);
                                    persona.TRABAJADOR.ESTUDIO.GRADO = gradoBL.GetFromGradosById(1);
                                    //persona.TRABAJADOR.AutogeneradoEsSalud = autogeneradoEsSaludTextBox.Text.ToUpper();
                                    //persona.TRABAJADOR.GrupoSanguineo = grupoSanguineoTextBox.Text.ToUpper();

                                    persona.TRABAJADOR.Nacionalidad = "PERUANA";
                                    persona.TRABAJADOR.PaisEmisor = "PERÚ";
                                    persona.TRABAJADOR.Observacion = observacionRichTextBox.Text.ToUpper();
                                    persona.TRABAJADOR.FOTOes = foto;

                                    //Expediente
                                    var expediente = new EXPEDIENTE()
                                    {
                                        IdTrabajador = persona.TRABAJADOR.Id,
                                        FichaPersonal = fichaPersonalCheckBox.Checked ? true : false,
                                        HojaInduccion = hojaInduccionCheckBox.Checked ? true : false,
                                        HistorialFotocheck = historialFotocheckCheckBox.Checked ? true : false,
                                        InformePsicologico = informePsicologicoCheckBox.Checked ? true : false,
                                        CertificadoEstudios = certificadoEstudiosCheckBox.Checked ? true : false,
                                        CertificadoTrabajo = certificadoTrabajoCheckBox.Checked ? true : false,
                                        HojaVida = hojaVidaCheckBox.Checked ? true : false,
                                        CursoCertificados = cursoCertificadosCheckBox.Checked ? true : false,
                                        CopiaDNI = copiaDNICheckBox.Checked ? true : false,
                                        ConstanciaAFP = constanciaAFPCheckBox.Checked ? true : false,
                                        PartidaMatrimonio = partidaMatrimonioCheckBox.Checked ? true : false,
                                        CopiaDNIPareja = copiaDNIParejaCheckBox.Checked ? true : false,
                                        CopiaDNIHijos = copiaDNIHijosCheckBox.Checked ? true : false,
                                        ConstanciaEstudiosHijos = constanciaAFPCheckBox.Checked ? true : false,
                                        HojasComplementarias = hojasComplementariasCheckBox.Checked ? true : false,
                                        Retenciones = retencionesCheckBox.Checked ? true : false,
                                        Observaciones = observacionesTextBox.Text.ToUpper()
                                    };

                                    persona.TRABAJADOR.EXPEDIENTE = expediente;

                                    var valor = ObtenerArchivoPDF();
                                    if (valor != 0)
                                    {
                                        var cv = new CURRICULO()
                                        {
                                            IdTrabajador = persona.TRABAJADOR.Id,
                                            Imagen = contents,
                                            Hash = sbPDF.ToString()
                                        };

                                        persona.TRABAJADOR.CURRICULO = cv;
                                    }

                                    personaBL.UpdatePersonaTrabajador(persona);
                                    MessageBox.Show("Modificación Correcta", "Registro",
                                    MessageBoxButtons.OK, MessageBoxIcon.Information);
                                    this.Close();
                                }
                            }

                            #endregion
                        }
                        catch (Exception ex)
                        {
                            msg = ex.Message;
                            MessageBox.Show(msg, "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                    }
                    else
                    {
                        MessageBox.Show("La fecha de nacimiento debe ser menor a la actual", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
            }
        }

        //cargando datos ESTUDIOS con boton extendido
        private void btnEstudios_Click(object sender, EventArgs e)
        {
            cargaEstudios();
        }

        public void cargaEstudios()
        {
            FrmEstudio frm = new FrmEstudio();
            frm.Extend();
            frm.ShowDialog();

            if (frm.currentEstudio != null)
            {
                var nuevoEstudio = estudioBL.GetFromEstudioById(frm.currentEstudio.IdEstudios);
                var estudio = tRABAJADORBindingSource.Current as TRABAJADOR;
                estudio.ESTUDIO = nuevoEstudio;
                estudio.IdEstudios = nuevoEstudio.IdEstudios;
                tRABAJADORBindingSource.ResetBindings(true);
            }
        }

        private void btnAddEspecialidad_Click(object sender, EventArgs e)
        {
            var _currentTrabajador = tRABAJADORBindingSource.Current as TRABAJADOR;
            ESPECIALIDAD_TRABAJADOR _currenTrabajadorEspecialidad = tRABAJADOR_ESPECIALIDADBindingSource.Current as ESPECIALIDAD_TRABAJADOR;

            FrmEspecialidadTrabajador frm = new FrmEspecialidadTrabajador();
            frm.Extend();
            frm.ShowDialog();

            _currenTrabajadorEspecialidad = frm.currentEspTrabajador;

            if (_currenTrabajadorEspecialidad != null)
            {
                var _especialidadTrab = new TRABAJADOR_ESPECIALIDAD
                {
                    EspecialidadTrabId = _currenTrabajadorEspecialidad.Id,
                    TrabajadorId = _currentTrabajador.Id,
                    TRABAJADOR = _currentTrabajador,
                    ESPECIALIDAD_TRABAJADOR = _currenTrabajadorEspecialidad
                };

                var existe = _currentTrabajador.TRABAJADOR_ESPECIALIDAD.Where(p => p.ESPECIALIDAD_TRABAJADOR.Id.Equals(_especialidadTrab.EspecialidadTrabId)).SingleOrDefault();
                if (existe == null)
                {
                    //_trabajador.TRABAJADOR_ESPECIALIDAD = _especialidadTrab;
                    tRABAJADOR_ESPECIALIDADBindingSource.Add(_especialidadTrab);
                    tRABAJADOR_ESPECIALIDADBindingSource.ResetBindings(true);
                }
                else
                {
                    var rpt = MessageBox.Show(this, string.Format("La Especialidad: {0}, " + "ya se agregó", _currenTrabajadorEspecialidad.Descripcion),
                                       "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                }
            }
        }

        private void tRABAJADOR_ESPECIALIDADDataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            var _especialidadTrab = tRABAJADOR_ESPECIALIDADBindingSource.Current as TRABAJADOR_ESPECIALIDAD;

            if (_especialidadTrab != null)
            {
                if (this.tRABAJADOR_ESPECIALIDADDataGridView.Columns[e.ColumnIndex].Name.Equals("btnQuitar"))
                {
                    var rpt = MessageBox.Show(this, string.Format("¿Desea quitar la especialidad: {0}?", _especialidadTrab.ESPECIALIDAD_TRABAJADOR.Descripcion),
                        "Mensaje", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

                    if (rpt == DialogResult.Yes)
                    {
                        if (_especialidadTrab.Id > 0)
                        {
                            trabEspecialidadBL.RemoveTrabajadorEspecialidadByTrabajadorIdEspecialidadTeabajadorId(_especialidadTrab.TrabajadorId, _especialidadTrab.EspecialidadTrabId);
                        }
                        tRABAJADOR_ESPECIALIDADBindingSource.RemoveCurrent();
                        tRABAJADOR_ESPECIALIDADBindingSource.ResetBindings(true);
                    }
                }
            }
        }

        private void btnAddPadres_Click(object sender, EventArgs e)
        {
            var _trabajador = tRABAJADORBindingSource.Current as TRABAJADOR;
            PADRE currentPadre = tRABAJADOR_PADRESBindingSource.Current as PADRE;
            FrmPadre frm = new FrmPadre();
            frm.Extend();
            frm.ShowDialog();
            if (frm.currentPadre != null)
            {
                currentPadre = frm.currentPadre;

                var _padre = new TRABAJADOR_PADRES
                {
                    TrabajadorId = _trabajador.Id,
                    TRABAJADOR = _trabajador,
                    PadreId = currentPadre.IdPadre,
                    PADRE = currentPadre
                };

                var existe = _trabajador.TRABAJADOR_PADRES.Where(p => p.PADRE.IdPadre.Equals(_padre.PadreId)).SingleOrDefault();
                if (existe == null)
                {
                    tRABAJADOR_PADRESBindingSource.Add(_padre);
                    tRABAJADOR_PADRESBindingSource.ResetBindings(true);
                }
                else
                {
                    var rpt = MessageBox.Show(this, string.Format("La Padre: {0}, " + "ya se agregó", currentPadre.NombreCompleto),
                                       "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                }
            }
        }

        private void tRABAJADOR_PADRESDataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            var _padre = tRABAJADOR_PADRESBindingSource.Current as TRABAJADOR_PADRES;

            if (_padre != null)
            {
                if (this.tRABAJADOR_PADRESDataGridView.Columns[e.ColumnIndex].Name.Equals("btnQuitarPadre"))
                {
                    var rpt = MessageBox.Show(this, string.Format("¿Desea quitar el padre: {0}?", _padre.PADRE.NombreCompleto),
                        "Mensaje", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

                    if (rpt == DialogResult.Yes)
                    {
                        if (_padre.Id > 0)
                        {
                            trabPadreBL.RemoveTrabajadorPadreByTrabajadorIdPadreId(_padre.TrabajadorId, _padre.PadreId);
                        }
                        tRABAJADOR_PADRESBindingSource.RemoveCurrent();
                        tRABAJADOR_PADRESBindingSource.ResetBindings(true);
                    }
                }
            }
        }

        private void cbxRecomendable_CheckedChanged(object sender, EventArgs e)
        {
            if (cbxRecomendable.Checked == false)
            {
                tcDatos.TabPages.Add(datObservaciones);
            }
            else if (cbxRecomendable.Checked == true)
            {
                tcDatos.TabPages.Remove(datObservaciones);
            }
        }        

        private void btnAddCapacitacion_Click(object sender, EventArgs e)
        {
            var _trabajador = tRABAJADORBindingSource.Current as TRABAJADOR;
            CAPACITACION currentCapacitacion = tRABAJADOR_CAPACITACIONBindingSource.Current as CAPACITACION;
            FrmCapacitacion frm = new FrmCapacitacion();
            frm.Extend();
            frm.ShowDialog();
            if (frm.currentCapacitacion != null)
            {
                currentCapacitacion = frm.currentCapacitacion;

                var _capacitacion = new TRABAJADOR_CAPACITACION
                {
                    CapacitacionId = currentCapacitacion.Id,
                    TrabajadorId = _trabajador.Id,
                    TRABAJADOR = _trabajador,
                    CAPACITACION = currentCapacitacion
                };

                var existe = _trabajador.TRABAJADOR_CAPACITACION.Where(p => p.CAPACITACION.Id.Equals(_capacitacion.CapacitacionId)).SingleOrDefault();
                if (existe == null)
                {
                    tRABAJADOR_CAPACITACIONBindingSource.Add(_capacitacion);
                    tRABAJADOR_CAPACITACIONBindingSource.ResetBindings(true);
                }
                else
                {
                    var rpt = MessageBox.Show(this, string.Format("La Capacitación: {0}, " + "ya se agregó", currentCapacitacion.Descripcion),
                                       "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                }
            }
        }

        private void tRABAJADOR_CAPACITACIONDataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            var _current = tRABAJADOR_CAPACITACIONBindingSource.Current as TRABAJADOR_CAPACITACION;

            var _capacitacion = trabCapBL.GetFromTrabajadorCapacitacionById(_current.CapacitacionId);

            if (_capacitacion != null)
            {
                if (this.tRABAJADOR_CAPACITACIONDataGridView.Columns[e.ColumnIndex].Name.Equals("btnQuitarCapacitacion"))
                {
                    var rpt = MessageBox.Show(this, string.Format("¿Desea quitar la Capacitación: {0}?", _capacitacion.CAPACITACION.Descripcion),
                        "Mensaje", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

                    if (rpt == DialogResult.Yes)
                    {
                        if (_capacitacion.Id > 0)
                        {
                            trabCapBL.RemoveTrabajadorCapacitacionByTrabajadorIdPadreId(_capacitacion.TrabajadorId, _capacitacion.CapacitacionId);
                        }
                        tRABAJADOR_CAPACITACIONBindingSource.RemoveCurrent();
                        tRABAJADOR_CAPACITACIONBindingSource.ResetBindings(true);
                    }
                }
            }
        }

        private void apePaternoTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            var amberson = Convert.ToString("&");
            var par1 = Convert.ToString("(");
            var par2 = Convert.ToString(")");
            var punto = Convert.ToString(".");
            var guion = Convert.ToString("-");
            var coma = Convert.ToString(",");


            string cadena = amberson + par1 + par2 + punto + guion + coma + (char)8;

            if (Char.IsLetter(e.KeyChar) || cadena.Contains(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void apeMaternoTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            var amberson = Convert.ToString("&");
            var par1 = Convert.ToString("(");
            var par2 = Convert.ToString(")");
            var punto = Convert.ToString(".");
            var guion = Convert.ToString("-");
            var coma = Convert.ToString(",");


            string cadena = amberson + par1 + par2 + punto + guion + coma + (char)8;

            if (Char.IsLetter(e.KeyChar) || cadena.Contains(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void nombresTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            var amberson = Convert.ToString("&");
            var par1 = Convert.ToString("(");
            var par2 = Convert.ToString(")");
            var punto = Convert.ToString(".");
            var guion = Convert.ToString("-");
            var coma = Convert.ToString(",");


            string cadena = amberson + par1 + par2 + punto + guion + coma + (char)8;

            if (Char.IsLetter(e.KeyChar) || cadena.Contains(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void tallaTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsLetter(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void zapatoTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsNumber(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void paisEmisorTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            var amberson = Convert.ToString("&");
            var par1 = Convert.ToString("(");
            var par2 = Convert.ToString(")");
            var punto = Convert.ToString(".");
            var guion = Convert.ToString("-");
            var coma = Convert.ToString(",");


            string cadena = amberson + par1 + par2 + punto + guion + coma + (char)8;

            if (Char.IsLetter(e.KeyChar) || cadena.Contains(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void nroCuspTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            //var guion = Convert.ToString("-");

            //string cadena = guion;

            //if (Char.IsNumber(e.KeyChar) || cadena.Contains(e.KeyChar))
            //{
            //    e.Handled = false;
            //}
            //else if (Char.IsControl(e.KeyChar))
            //{
            //    e.Handled = false;
            //}
            //else if (Char.IsSeparator(e.KeyChar))
            //{
            //    e.Handled = false;
            //}
            //else
            //{
            //    e.Handled = true;
            //}
        }

        private void nroCuentaTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            var guion = Convert.ToString("-");

            string cadena = guion;

            if (Char.IsNumber(e.KeyChar) || cadena.Contains(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void nroFotocheckTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsNumber(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void autogeneradoEsSaludTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsNumber(e.KeyChar) || Char.IsLetter(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void grupoSanguineoTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            var guion = Convert.ToString("-");
            var mas = Convert.ToString("+");

            string cadena = guion + mas;

            if (Char.IsNumber(e.KeyChar) || Char.IsLetter(e.KeyChar) || cadena.Contains(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void nroConstanciaEstudiosTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsNumber(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void txtDocumento_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsLetter(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void fechaNacimientoDateTimePicker_ValueChanged(object sender, EventArgs e)
        {
            var resta = Math.Floor((System.DateTime.Now - fechaNacimientoDateTimePicker.Value.Date).TotalDays / 365);
            txtEdad.Text = resta.ToString();
        }

        private void btnVerificarUbigeo_KeyPress(object sender, KeyPressEventArgs e)
        {
            verificaExistenciaUbigeo();
        }



    }

}


